﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
using Microsoft.Office.Tools;
using System.Collections;
using LightingImportTool.Model;
using System.Drawing;
using Microsoft.Office.Core;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;


namespace LightingImportTool
{
    public static class ExcelHelper
    {
        public static void SetColor(Excel.Range range)
        {
            range.Borders[Excel.XlBordersIndex.xlDiagonalDown].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
            range.Borders[Excel.XlBordersIndex.xlDiagonalUp].LineStyle = Excel.XlLineStyle.xlLineStyleNone;

            Excel.Border[] borders = new Excel.Border[]
            {
                range.Borders[Excel.XlBordersIndex.xlEdgeLeft],
                range.Borders[Excel.XlBordersIndex.xlEdgeTop],
                range.Borders[Excel.XlBordersIndex.xlEdgeBottom],
                range.Borders[Excel.XlBordersIndex.xlEdgeRight],
            };

            foreach (Excel.Border border in borders)
            {
                border.LineStyle = Excel.XlLineStyle.xlContinuous;
                border.Color = ColorTranslator.ToOle(Color.Blue);
                border.Weight = Excel.XlBorderWeight.xlMedium;
                border.TintAndShade = 0;
            }

            range.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
            range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
        }

        public static void ClearColor(Excel.Range range)
        {
            range.Borders[Excel.XlBordersIndex.xlDiagonalDown].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
            range.Borders[Excel.XlBordersIndex.xlDiagonalUp].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
            range.Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
            range.Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
            range.Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
            range.Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
            range.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
            range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
        }

        /// <summary>
        /// 插入Xml文档
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        public static CustomXMLPart InsertXMLPart(Excel.Workbook document, string xml)
        {
            Object type = Type.Missing;
            return document.CustomXMLParts.Add(xml, type);
        }

        /// <summary>
        /// 根据命名空间选择自定义XMl
        /// </summary>
        /// <param name="nameSpace"></param>
        /// <returns></returns>
        public static CustomXMLPart SelectByNamespace(Excel.Workbook document, string nameSpace)
        {
            if (nameSpace == null)
                nameSpace = string.Empty;

            foreach (CustomXMLPart part in document.CustomXMLParts.SelectByNamespace(nameSpace))
            {
                return part;
            }
            return null;
        }


        public static Image GenThumbnail(Image imageFrom, int width, int height)
        {
            Image image = null;
            try
            {
                // 源图宽度及高度 
                int imageFromWidth = imageFrom.Width;
                int imageFromHeight = imageFrom.Height;
                // 生成的缩略图实际宽度及高度 
                int bitmapWidth = width;
                int bitmapHeight = height;
                // 生成的缩略图在上述"画布"上的位置 
                int X = 0;
                int Y = 0;
                // 根据源图及欲生成的缩略图尺寸,计算缩略图的实际尺寸及其在"画布"上的位置 
                if (bitmapHeight * imageFromWidth > bitmapWidth * imageFromHeight)
                {
                    bitmapHeight = imageFromHeight * width / imageFromWidth;
                    Y = (height - bitmapHeight) / 2;
                }
                else
                {
                    bitmapWidth = imageFromWidth * height / imageFromHeight;
                    X = (width - bitmapWidth) / 2;
                }
                // 创建画布 
                Bitmap bmp = new Bitmap(width, height);
                Graphics g = Graphics.FromImage(bmp);
                // 用白色清空 
                g.Clear(Color.White);
                // 指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。 
                g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                // 指定高质量、低速度呈现。 
                g.SmoothingMode = SmoothingMode.HighQuality;
                // 在指定位置并且按指定大小绘制指定的 Image 的指定部分。 
                g.DrawImage(imageFrom, new Rectangle(X, Y, bitmapWidth, bitmapHeight), new Rectangle(0, 0, imageFromWidth, imageFromHeight), GraphicsUnit.Pixel);
                image = bmp;
            }
            catch (Exception ex)
            {
            }
            return image;

        }
   
    }
}
